//
//  main.c
//  BatailleNavaleRoyale
//
//  Created by Amer Nasser on 14/11/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "stringTools.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "joueur.h"

#define ipAdress "127.0.0.1"

int main(int argc ,char **argv){
     
    
	struct sockaddr_in serveur;
    
	char nomJoueur[20];
	char connectCommand[30];
	char connectResponse[30];
	char confirmationResponse[15];
    
	int s =socket(AF_INET,SOCK_STREAM,0);
    
	memset((char *)&serveur,0,sizeof(serveur));
	serveur.sin_addr.s_addr= inet_addr(ipAdress);
	serveur.sin_port=htons(2012);
	serveur.sin_family=AF_INET;
    
    
    
	
    memset(nomJoueur,0,sizeof(nomJoueur));
    memset(connectCommand,0,sizeof(connectCommand));
    memset(connectResponse,0,sizeof(connectResponse));
	
    
    printf("Entrez le nom du joueur :\n");
	scanf("%s",nomJoueur);
	
	
		//Etablir la connection au serveur	
	if( (connect(s,(struct sockaddr *)&serveur,sizeof(serveur))) == -1 ){
		perror ("connect");
		exit(1);
	}	
    
    
    //Envoyer le nom du joueur
    sendName(s , nomJoueur);
    
    
    
	//attendre de Recevoir la reponse du serveur
	if( recv(s,connectResponse,sizeof(connectResponse),0) ==-1) {
		perror ("recvfrom");
		exit(1);
	}
    
	printf("%s\n",connectResponse);
    
    char** mot=splitString(connectResponse, '/');
    int nbUser=countChars(connectResponse, '/');
    int i;

    //Enregistre le nom du joueur dans username
    if(strcmp(mot[0],"WELCOME")!=0){
        printf("BYE BYE\n");
        close(s);
        exit(3);
    }
    
    //A corriger et a prendre tous les cas 
    
    char *username="";
    if(nbUser ==2){
        username =mot[1];
    }
    else{
        username=malloc(sizeofString((connectResponse)-8) * sizeof(char));
        for(i=1;i<nbUser;i++){
            strcat(username,mot[i]);
            if((i+1)<nbUser){
                strcat(username,"/");
            }
        }
    }
    
    printf("Votre username sera : %s\n",username);
    
    joueur *player =createPlayer(username);
    
    drawPlan(player);
    
    //Les joueurs dans la partie 
    
    if( recv(s,connectResponse,sizeof(connectResponse),0) ==-1) {
		perror ("recvfrom");
		exit(1);
	}
    
    printf("%s\n",connectResponse);
    
    //Placement des sous-marin
	
	putMySub(s , player) ;
    
    printf("fini\n");
    //Boucle du jeu
    while(1){
        
        memset(connectCommand,0,sizeof(connectCommand));
        memset(confirmationResponse,0,sizeof(confirmationResponse));
        memset(connectResponse,0,sizeof(connectResponse));
        if( recv(s,connectResponse,sizeof(connectResponse),0) ==-1) {
            perror ("recvfrom");
            exit(1);
        }
        
        printf("%s\n",connectResponse);
        
        char** mot4=splitString(connectResponse, '/');
  //      int nbcoord=(countChars(connectCommand, '/'));
        
        if(strcmp(mot4[0],"YOURTURN")==0){
			printf("Je suis dans la partie Yourturn  : \n");
            scanf("%s",connectCommand);
            strcat(connectCommand, "\n");
            
            if (send(s,connectCommand,sizeof(connectCommand),0) ==-1){
                perror("write");
                exit(1);
            }
        }
        
        if(strcmp(mot4[0],"TOUCHE")==0){
            char ord=mot4[2][0];
            int ordonne= ord -'A';
            int absicce=atoi(mot4[1]);
            
            player->positions[absicce][ordonne]=2;
            
        }
        
        if(strcmp(mot4[0],"OUCH")==0){

            char ord=mot4[2][0];
            int ordonne=ord -'A';
            int absicce=atoi(mot4[1]);
            
            partOfSubDestroyed(player->subs, absicce,ordonne,7);
            player->positions[absicce][ordonne]=-2;
            
        }
        
        if(strcmp(mot4[0],"MISS")==0){
            char ord=mot4[2][0];
            int ordonne=ord -'A';
            int absicce=atoi(mot4[1]);
            
            player->positions[absicce][ordonne]=1;
            
        }
        
        if(strcmp(mot4[0],"AWINNERIS")==0){
            break;
            
        }
        
        if(strcmp(mot4[0],"DRAWGAME")==0){
            break;
            
        }

		drawPlan( player  );

    }
    
    
    //FIN DU JEU
    
    //Demande d'un nouveau jeu ou de quitter
    
    memset(connectCommand,0,sizeof(connectCommand));
    memset(confirmationResponse,0,sizeof(confirmationResponse));
    memset(connectResponse,0,sizeof(connectResponse));
    
    
    scanf("%s",connectCommand);
    
    if (send(s,connectCommand,sizeof(connectCommand),0) ==-1){
        perror("write");
        exit(1);
    }
    
    
    
	close (s);
    
	return 0;
}
